/*
 * All rights Reserved, Designed By cloudland Copyright(C) 2010-2014
 *
 * fileName:  Cache.java
 * author:  lei
 * Company:  Cloudland Studio
 * Createdate:  2013-9-14 上午10:09:15
 *   
 * Modification  History:
 *     Date           Author        Version        
 * -------------------------------------------
 * 2013-9-14          Lei            1.0        
 *
 * Why & What is modified:
 * 1.0: 文件创建
 */
package org.cloudland.core.io;

import java.io.Serializable;
import java.util.Date;

 /**
 * <pre> 
 * 数据缓存接口。
 * </pre>
 * @ClassName  Cache
 * @author  lei
 * @version  %I%, %G%
 * @see  
 * @since   JDK1.6
 *
 */
public interface Cache<L extends Serializable> {
	
	/**
	 *  将键映射到值的对象。一个映射不能包含重复的键；每个键最多只能映射到一个值。<br>
	 *   
	 * @param key 键值
	 * @param value 要缓存的数据
	 * @return true:表示缓存成功
	 */
	boolean set(String key, L value);
	
	/**
	 * 将键映射到值的对象。一个映射不能包含重复的键；每个键最多只能映射到一个值。并指定数据在缓存中存在的有效时间。<br>
	 * <pre>
	 * 使用这个方法不能准确到毫秒级，只能准确到秒级。这点需要在开发过程中使用时，特别注意。
	 * 如果需要准确定时，请使用直接设置Date类型时间参数的方法。
	 * </pre>
	 * @param key 键值
	 * @param value 要缓存的数据
	 * @param validityTime 数据有效时间, 单位毫秒
	 * @return true:表示缓存成功
	 */
	boolean set(String key, L value, long validityTime);
	
	/**
	 * 将键映射到值的对象。一个映射不能包含重复的键；每个键最多只能映射到一个值。并指定数据在缓存中存在的有效时间。<br>
	 * 
	 * @param key 键值
	 * @param value 要缓存的数据
	 * @param validityTime 数据有效时间
	 * @return true:表示缓存成功
	 */
	boolean set(String key, L value, Date validityTime);
	
	/**
	 * 根据指定的键获取对应的值对象。<br>
	 * 
	 * @param key 键值
	 * @return 对应的值对象
	 */
	L get(String key);
	
	/**
	 * 将指定的键对象对应的数据删除。<br>
	 * 
	 * @param key 键值
	 */
	boolean remove(String key);
}
